package visiopuce.DAO;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import org.hibernate.Query;

import visiopuce.HibernateUtil;
import visiopuce.objets.Famille;
import visiopuce.objets.GeneNcbi;

public class FamilleDAOImpl extends GenericDAOImpl<Famille, BigDecimal> implements FamilleDAO {

	/** Constructeur priv� */
	private FamilleDAOImpl() {
	}

	/** Instance unique non pr�initialis�e */
	private static FamilleDAOImpl INSTANCE = null;

	/** Point d'acc�s pour l'instance unique du singleton */
	public static FamilleDAO getInstance() {
		if (INSTANCE == null) {
			INSTANCE = new FamilleDAOImpl();
		}
		return INSTANCE;
	}

	@Override
	public List<Famille> getFamille(Integer idPersonne) {
		ArrayList<Famille> familles = null;
		String sql = null;
		Query query;
		sql = "SELECT distinct f.idFamille FROM Famille f WHERE f.mere.idPersonne = :idMere or f.pere.idPersonne = :idPere or f.personne.idPersonne = :idPersonne";
		query = HibernateUtil.getSession().createQuery(sql).setParameter("idMere", idPersonne);
		query.setParameter("idPere", idPersonne);
		query.setParameter("idPersonne", idPersonne);
		Integer idFamille = (Integer) query.uniqueResult();
		if (idFamille != null && idFamille != 0) {
			Query query2;
			String sql2 = "SELECT distinct f FROM Famille f WHERE f.idFamille = :idFamille";
			query2 = HibernateUtil.getSession().createQuery(sql2);
			query2.setParameter("idFamille", idFamille);
			familles = (ArrayList<Famille>) query2.list();
		}

		return familles;
	}

	@Override
	public Integer getIdFamille(Integer idPersonne) {
		String sql = null;
		Query query;
		sql = "SELECT distinct f.idFamille FROM Famille f WHERE f.mere.idPersonne = :idMere or f.pere.idPersonne = :idPere or f.personne.idPersonne = :idPersonne";
		query = HibernateUtil.getSession().createQuery(sql).setParameter("idMere", idPersonne);
		query.setParameter("idPere", idPersonne);
		query.setParameter("idPersonne", idPersonne);
		Integer idFamille = (Integer) query.uniqueResult();
		return idFamille;
	}

	@Override
	public Famille getIndividu(Integer idPersonne) {
		String sql = null;
		Query query;
		sql = "SELECT distinct f FROM Famille f WHERE f.personne.idPersonne = :idPersonne";
		query = HibernateUtil.getSession().createQuery(sql).setParameter("idPersonne", idPersonne);
		return findOne(query);
	}
}